草庐IT

c++ - C++ 中复杂的 Typedef

全部标签

c++ - 在 C++ 中将 typedef 区分为相同类型

我想要类似于下面的功能:typedefintA;typedefintB;structfoo{foo(Aa){/*specifictotypeA*/}foo(Bb){/*specifictotypeB*/}};我在我的程序中使用typedef来表示同一类型在逻辑上的不同用法。所以,我想为不同的typedef创建不同类型的foo对象。我可以在g++中编译它,但是msvc抛出一个合适的说法,当它看到第二个定义foo(B)时,foo(A)已经被定义了。我想到了使用类型列表和列表中类型的位置来区分typedef,并尝试使用boost::mpl::vector:#include#includety

c++ - typedef 类型检查?

如何让g++对typedef进行类型检查?可能吗?即typedefintT1;typedefintT2;T1x=5;//OkwithmeT2y=x;//Anywaytogetanerrororawarninghere?我不能使用C++0x特性(我不知道他们是否可以这样做。)编辑:我想要的是这样的:typedefintBallID;typedefintBatID;BatIDx=10;mapm;m.insert(make_pair(x,bigbat));//OKBallIDy=15;m.insert(make_pair(y,smallbat));//Givemeawarningatleas

c++ - 区分 C++11 原始类型名称和 typedef 名称?

有没有办法区分类型的原始名称和该类型的typedef名称?例如:classC1{};typedefC1C2;C1和C2现在都命名相同的类型。在上述代码之后,是否存在不能用C2替换名称C1的情况(反之亦然)? 最佳答案 一个typedef创建一个别名,并且它们作为一个类型是无法区分的。另一方面,有一些特定的语法结构需要真实类型而不是类型定义(构造函数/析构函数的声明/定义......),但这是一个不同的问题。作为一种类型,它们是无法区分的。 关于c++-区分C++11原始类型名称和type

c++ - Typedef 适用于结构但不适用于枚举,仅适用于 C++

我有以下代码:test_header.h:typedefenum_test_enumtest_enum;enum_test_enum{red,green,blue};typedefstruct_test_structtest_struct;struct_test_struct{ints1;ints2;ints3;};测试.c:#include#includeintmain(){test_structs;s.s1=1;s.s2=2;s.s3=3;printf("Hello%d%d%d\n",s.s1,s.s2,s.s3);}test_cpp.cpp:extern"C"{#include}

c++ - C++中复杂结构的序列化

我正在尝试用C++序列化一组结构。这适用于除我的结构中包含的vector之外的所有数据。我可以将数据写入磁盘,然后将所有数据读回内存。唯一的问题是当我尝试访问vector的元素时出现段错误。我的代码如下。非常感谢任何帮助。写入磁盘的程序intmain{structStudentone;strcpy(one.FullName,"ErnestineWaller");strcpy(one.CompleteAddress,"824LarsonDrv,SilverSpring,MD20910");one.Gender='F';one.LivesInASingleParentHome=true;o

c++ - 在 C++ 中使用 C 风格的 struct/typedef

我有一个混合使用C和C++的项目。在C头文件中,我有这样的代码:typedefstructmystruct*mystruct;structmystruct{//whateverstructneeds};为了在C++文件中使用它,我正在做:extern"C"{#include"mystruct.h"}所以你看到我正在创建一个使用相同名称的不透明指针。这在C中很好,但在C++中不行(因为要求在C中使用struct关键字实例化,但在C++中不行)。但是,在尝试编译C++代码时出现错误(声明冲突)。我认为使用extern"C"会使编译器将Cheader视为C,但它似乎仍将其用作C++。对这里发

c++ - 为什么他用 "typedef vector<double>::size_type"而不是用 "int"

我刚刚学习C++,并且正在使用AcceleratedC++。在一个vector例子中,作者使用了如下代码;typedefvector::size_typevec_sz;vec_szsize=homework.size;我知道typedefvector::size_typevec_sz;这样他就不必将下一个命令写成vector::size_typesize=homework.size;,但我的问题是他为什么不直接声明size改为整数?intsize=homework.size;这是因为我们使用了vector吗?如果是这样,是否意味着vector迭代器返回的值不能存储在常规变量中?

c++ - 这个typedef是什么意思?

在KennyKerr先生的thiscolumn,他定义了一个结构和一个typedef,如下所示:structboolean_struct{intmember;};typedefintboolean_struct::*boolean_type;那么这个typedef是什么意思呢?另一个问题是关于下面的代码:operatorboolean_type()constthrow(){returnTraits::invalid()!=m_value?&boolean_struct::member:nullptr;}“&boolean_struct::member”是什么意思?

c++ - 转发声明未命名结构的 typedef

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Forwarddeclarationsofunnamedstruct如果我有typedefstructtagPAGERANGE{intiFirstPage;intiLastPage;}PAGERANGE;我可以这样转发声明structtagPAGERANGE;typedefstructtagPAGERANGEPAGERANGE;但是我有的是typedefstruct{intiFirstPage;intiLastPage;}PAGERANGE;我不确定我该怎么做。我只想持有指向该结构的指针。现在我坚持要么包含一

c++ - 性能 : typedef vs wrapper class for primitive types?

我想在C++中定义一个新类型,它只是一些原始类型(在我的示例中,int可以是任何类型)。在此示例中,我将类型称为NodeId。我可以只使用typedefintNodeId。我想要NodeId的默认值,所以我会使用#defineNULL_NODE_ID-1。现在,我认为定义一个类而不是typedef会更好,以允许函数isValid()和构造nullNodeId的默认构造函数:classNodeId{intvalue;public:inlineNodeId():value(-1){}inlineNodeId(intvalue):value(value){}inlineoperatorint